昨天我們雖然各別把 .java 跟 .class 分類到不同的資料夾,
但長久下來還是不夠的,我們還是需要把類別來做分類,讓程式碼更好管理~
在 Java 語法中有個 package 關鍵字,可以幫助我們把類別做分類管理哦!
我們來把昨天的兩個檔案加上 package !
package cc.oyang.util;
public class Utils {
public static void printABC(){
System.out.println("print ABC");
}
}
package cc.oyang;
public class MyHelloWorld {
public static void main(String[] args) throws Exception {
System.out.println("My First Hello World !");
Utils.printABC();
}
}
設定 package 的同時也要把 .java 檔案放到相同階層的資料夾哦!如下圖~
那下一步就要再編譯我們的 java 原始檔:
編譯器卻不知道 Utils 物件從哪裡來,這是為什麼呢?
當我們在程式碼裡面使用某個類別時,如果在相同套件中,只需要使用 class 定義的類別名稱就可以使用了,
但如果是在不同套件,就必須要使用 完全吻合名稱 ,這又是什麼呀?
完全吻合名稱(Fully qualified name) : package + class
也就是說~我們的 MyHelloWorld.java 要改成下方:
package cc.oyang;
public class MyHelloWorld {
public static void main(String[] args) throws Exception {
System.out.println("My First Hello World !");
cc.oyang.util.Utils.printABC();
}
}
再來編譯一次!javac -d classes src/cc/oyang/MyHelloWorld.java
咦~~~又失敗了,為什麼呢?
原來是我們沒有設定 -sourcepath 給 javac,javac 找不到 MyHelloWorld.java 使用到的額外類別的原始檔 Utils.javajavac -sourcepath src -d classes src/cc/oyang/MyHelloWorld.java
編譯時如果有指定 -d 把 .class 放到到某個目錄,結果會在該資料夾下自動建立出對應的套件階層的資料夾哦!
最後一點!
如果每次都要用 完全吻合名稱 ,加上套件名稱又很長的話就是件麻煩事情了!
所以我們還有一個方便的東西叫做 import
package cc.oyang;
import cc.oyang.util.Utils;
public class MyHelloWorld {
public static void main(String[] args) throws Exception {
System.out.println("My First Hello World !");
Utils.printABC();
}
}
一樣可以編譯跟執行成功喔!
這邊要執行的話,不能只用類別名稱哦,要使用完全吻合名稱!